<?php

Yii::import('campanias.models._base.BaseCampaniaUsuarioCruge');

class CampaniaUsuarioCruge extends BaseCampaniaUsuarioCruge {

    /**
     * @return CampaniaUsuarioCruge
     */
    public $userId;
    public $userName;
    public $userRol;
    public $idusercruge;

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'CampaniaUsuarioCruge|CampaniaUsuarioCruges', $n);
    }

    /**
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * etiquetas de atributos
     * @return type
     */
    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'campania_id' => Yii::t('app', 'Campania'),
            'usuario_id' => Yii::t('app', 'Usuario'),
            'campania' => null,
            'userName' => Yii::t('app', 'Nombre'),
            'userRol' => Yii::t('app', 'Perfil'),
            'idusercruge' => Yii::t('app', 'Usuario Sesion')
        );
    }

    /**
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * relaciones 
     * @return type
     */
    public function relations() {
        return array_merge(parent::relations(), array(
        ));
    }

    /**
     * 
     * @return type
     */
    public function getRolUserCampania() {
        $result = Util::getRolUser($this->usuario_id);
        return !empty($result) ? $result[0]['rol'] : "";
    }

    /**
     * parametros de truulo Search
     * @return type
     */
    public function searchParams() {
        return array(
            'userName',
        );
    }

    /**
     * Asigna los parametro de busqueda para el widget search
     * @param {array} $params
     * @return {array}
     */
    public function assignParams($params, $searchParams) {
        if ($params['filters'][0] == 'all') {
            foreach ($searchParams as $param) {
                if (array_key_exists($param, $this)) {
                    $this->$param = $params['value'];
                } else if (array_key_exists($param, $this->attributes)) {
                    $tempAttr = array();
                    $tempAttr[$param] = $params['value'];
                    $this->$param = $tempAttr;
                }
            }
        } else {
            foreach ($params['filters'] as $param) {
                if (array_key_exists($param, $this)) {
                    $this->$param = $params['value'];
                } else if (array_key_exists($param, $this->attributes)) {
                    $tempAttr = array();
                    $tempAttr[$param] = $params['value'];
                    $this->$param = $tempAttr;
                }
            }
        }
    }

    /**
     * scopes
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     */
    public function scopes() {
        return array(
        );
    }

    /**
     * filtro de campañas
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * @param type $campania_id
     * @return \CampaniaUsuarioCruge
     */
    public function de_campania($campania_id) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 'campania_id = :campania_id',
                    'params' => array(
                        ':campania_id' => $campania_id
                    )
                )
        );
        return $this;
    }

    /**
     * Permite buscar los usuarios de una campaña, retornando su id y su nombre de usuario
     * @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
     * @param type $campania_id
     * @return type
     */
    public function de_campania_users($campania_id) {
        $command = Yii::app()->db->createCommand()
                ->select("cu.iduser, cu.username")
                ->from("campania_usuario_cruge ca")
                ->leftJoin('cruge_user cu', 'ca.usuario_id = cu.iduser')
                ->Where("ca.campania_id=:id", array(':id' => $campania_id));
        return ($command->queryAll());
    }

    /**
     * Mostrar los contactos asignados a los respectivos usuarios
     * @author Miguel Alba <malba@tradesystem.com.ec>
     */

    /**
     * consulta de ususarios especialista y operador
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * @param type $campania_id
     * @param type $perfil
     * @return type
     */
    public function getUsersCampania($campania_id = null, $perfil = NULL) {
        $command = Yii::app()->db->createCommand()
                ->select("
                        cu.iduser as iduser,
                        cu.username as name,
                        cas.itemname as perfil,
                        cu.email as email,
                        count(cco.cliente_id) as totalCuentas,
                        cuc.campania_id as campania_id")
                ->from("campania_usuario_cruge cuc")
                ->leftJoin('cruge_user cu', 'cuc.usuario_id = cu.iduser')
                ->leftJoin('cruge_authassignment cas', 'cas.userid = cu.iduser')
                ->leftJoin('campania_clientes_owner cco', 'cco.owner_id = cuc.usuario_id');

        //segun la campaña
        if ($campania_id) {
            $command->where("cuc.campania_id = :campania_id", array(':campania_id' => $campania_id));
        }
        //segun al perfil
        if ($perfil) {
            if ($campania_id) {
                $command->andWhere("cas.itemname = :itemname", array(':itemname' => $perfil));
            } else {
                $command->wheres("cas.itemname = :itemname", array(':itemname' => $perfil));
            }
        }
        //Agrupar por el usuario_id
        $command->group('cuc.usuario_id');
        //Ordenar por la cantidad de cuentas asignadas
        $command->order('totalCuentas asc');
        return ($command->queryAll());
    }

    /**
     * search usuarios de la campaña
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * @param type $campania_id
     * @return \CActiveDataProvider
     */
    public function searchUsuarioCampania($campania_id) {
        $criteria = new CDbCriteria;
        $criteria->addCondition('t.campania_id = :camapnia_id', 'AND');
        $criteria->params = array(':camapnia_id' => $campania_id);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    /**
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * Muestra la informacion exclusivamente del rol a buscar con su respectiva campanias
     * @param type $campania_id
     * @param type $tipoRol =OPERADOR,SUPERVISOR ETC
     * @return \CActiveDataProvider
     */
    public function searchTipoRolCampania($campania_id, $tipoRol) {
        $criteria = new CDbCriteria;
        $criteria->select = "*";
        $criteria->join = "left join cruge_user cu on t.usuario_id = cu.iduser";
        $criteria->join.=" left join cruge_authassignment cas on cas.userid = cu.iduser";
        $criteria->condition = "t.campania_id=:campania_id  AND cas.itemname=:nombreRol";
        $criteria->params = array(
            ':nombreRol' => $tipoRol,
            ':campania_id' => $campania_id,
        );
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    /**
     * search usuarios que no pertenecen a la campaña
     * @autor Alex Yépez <ayepez@tradesystem.com.ec>
     * @param type $campania_id
     * @return \CActiveDataProvider
     *  $userId;
      $userName;
      $userRol
     */
    public function searchUsuarioNotCampaña($campania_id) {
        $criteria = new CDbCriteria;
        $criteria->select = "cu.iduser as 'id',cu.username as 'userName',cas.itemname as 'userRol',t.campania_id";
        //joins
        $criteria->join = "right join cruge_user cu on cu.iduser = t.usuario_id";
        $criteria->join.=" left join cruge_authassignment cas on cas.userid = cu.iduser";
        //search
        $criteria->compare('cu.username', $this->userName, true, 'OR');
        $criteria->compare('cas.itemname', $this->userRol, true, 'OR');
        //conditions
        $criteria->addCondition('(cas.itemname = :rol_operador OR cas.itemname = :rol_supervisor)', 'AND');
        $criteria->addCondition("cu.iduser not in (select t2.usuario_id from campania_usuario_cruge t2 where t2.campania_id = :campania_id)", 'AND');
        //group by
        $criteria->group = "cu.iduser";
        //params
        $Params = array(
            ':rol_operador' => Constants::ROL_OPERADOR,
            ':rol_supervisor' => Constants::ROL_SUPERVISOR,
            ':campania_id' => $campania_id);
        $criteria->params = array_merge($criteria->params, $Params);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    /**
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * Muestra solo la informacion de acuerdo al tip
     */
//buscar de acuerdo al tipo 
    public function searchUsuarioNotCampañaRol($campania_id, $tipoRol) {
        $criteria = new CDbCriteria;
        $criteria->select = "t.usuario_id as 'idusercruge', cu.iduser as 'id',cu.username as 'userName',cas.itemname as 'userRol',t.campania_id";
        //joins
        $criteria->join = "right join cruge_user cu on cu.iduser = t.usuario_id";
        $criteria->join.=" left join cruge_authassignment cas on cas.userid = cu.iduser";
        //search
        $criteria->compare('cu.username', $this->userName, true, 'OR');
        //conditions
        $criteria->addCondition('(cas.itemname = :rol_operador)', 'AND');
        $criteria->addCondition("cu.iduser not in (select t2.usuario_id from campania_usuario_cruge t2 where t2.campania_id = :campania_id)", 'AND');
        //group by
        $criteria->group = "cu.iduser";
        //params
//        var_dump($tipoRol);
//        die();
        $Params = array(
            ':rol_operador' => $tipoRol,
            ':campania_id' => $campania_id);
        $criteria->params = array_merge($criteria->params, $Params);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    public function getUsersCampaniaGrupoContador($campania_id = null) {
        $command = Yii::app()->db->createCommand()
                ->select("
                        count(cuc.id) as numCuentas,
                        g.id as idGrupo,
                        cu.username as name,
                        cas.itemname as perfil,
                        cu.email as email,
                        ")
                ->from("cuenta cuc")
                ->leftJoin('cruge_user cu', 'cuc.usuario_id = cu.iduser')
                ->leftJoin('cruge_authassignment cas', 'cas.userid = cu.iduser')
        ;

        //segun la campaña
        if ($campania_id) {
            $command->where("cuc.campania_id = :campania_id", array(':campania_id' => $campania_id));
        }

        return ($command->queryAll());
    }

    /**
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * @return type retorna la ultima secion q tuvo un usuario
     */
    public function ultimaSesionUsuario($id = null) {
        $modelICrugeStoredUserFecha = Yii::app()->user->um->getSearchModelICrugeStoredUser();

        $fechaUltimaSesion = '';

        if ($id) {
            $modelICrugeStoredUserFecha = CrugeStoredUser::model()->findByPk($id)->logondate;

            $fechaUltimaSesion = $modelICrugeStoredUserFecha ? Yii::app()->user->ui->formatDate($modelICrugeStoredUserFecha) : '';
        }
        return $fechaUltimaSesion;
    }

}
